package Polymorphism3;

class  Animal{
    protected String name;

    public Animal(String name) {
        this.name = name;
    }
}
// 飞翔技能接口
interface IFlying{
// 不是每个动物，都会飞。不能作为共性提取出来。放进父类
// 所以我们将它抽离出来，作为一个接口，会飞的动物我们就给它实现这个接口
    // 不会的，不给它的接口就行了
    // 而且弥补了java中，类只能继承一个类的缺陷
    // 因为一个类可以实现多个接口
    void fly();
}
// 迅步技能接口
interface IRunning{
    void run();
}
// 水遁技能接口
interface ISwimming{
    void swim();
}

// 鸟
class Bird extends Animal implements IFlying{// 鸟类天赋技能飞翔
    public Bird(String name){
        super(name);
    }
    @Override
    public void fly(){
        System.out.println(this.name+"发动技能飞翔");
    }
}
// 狗
class Dog extends Animal implements IRunning{//狗天赋技能迅步
    public Dog(String name){// 构造子类调用构造方法时，先帮助父类完成构造方法
        super(name);// 调用父类的构造方法
    }
    @Override
    public void run(){
        System.out.println(this.name+"发动技能迅步");
    }
}
// 青蛙
class Frog extends Animal implements IRunning,ISwimming{
    public Frog(String name){
        super(name);
    }
    @Override
    public void swim(){
        System.out.println(this.name+"发动了水遁技能");
    }
    @Override
    public void run(){// 青蛙是会跑的，可能小时候在农村长大的朋友见到过。
        System.out.println(this.name+"发动了迅步技能");
    }
}
// 鸭子 集合三种技能的神兽
class Duck extends Animal implements IRunning,ISwimming,IFlying{
    public Duck(String name){
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(this.name+"发动技能飞翔");
    }

    @Override
    public void run() {
        System.out.println(this.name+"发动了迅步技能");
    }

    @Override
    public void swim() {
        System.out.println(this.name+"发动了水遁技能");
    }
}
public class Test4 {
    public static void runFunc(IRunning iRunning){
        iRunning.run();
    }
    public static void swimFunc(ISwimming iSwimming){
        iSwimming.swim();
    }
    public static void flyFunc(IFlying iFlying){
        iFlying.fly();
    }
    public static void main(String[] args) {
        runFunc(new Dog("二哈"));
        runFunc(new Duck("唐老鸭"));
        runFunc(new Frog("妙蛙种子"));
        System.out.println("=============");
        swimFunc(new Duck("唐老鸭"));
        swimFunc(new Frog("妙蛙种子"));
        System.out.println("================");
        flyFunc(new Bird("凤凰"));
        flyFunc(new Duck("唐老鸭"));

    }
}
